﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A53文件流FileStream
{
    class Program
    {
        //演示文件流读取文件  解码跟读取没有太大关系
        static void Main1(string[] args)
        {
            Encoding gb2312 = Encoding.GetEncoding("GB2312");
            string file = @"C:\Users\Administrator\Desktop\诛仙.txt";

            //创建文件流
            //using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None))
            using (FileStream fs = File.OpenRead(file))
            {
                //准备一个缓冲区
                byte[] arr = new byte[1024];//1KB的缓冲区,用来接收数据
                while (true)
                {
                    //读取文件
                    int length = fs.Read(arr, 0, arr.Length);//返回值表示真是读取到的字节数
                                                             //使用数据   解码显示   转发网络 转存
                    Console.WriteLine(gb2312.GetString(arr, 0, length));//解码显示
                    Console.WriteLine("文件共{0}字节,本次读取到{1}字节,当前位置{2}字节", fs.Length, length, fs.Position);
                    //暂停
                    Console.ReadLine();
                    if (length == 0)//读取到0字节说明读完了
                    {
                        break;
                    }
                }
            }

        }
        //演示文件流写入
        static void Main(string[] args)
        {
            //如果文件存在
            string path= @"D:\test.txt";
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            using (var fs = File.OpenWrite(path))
            {
                while (true)
                {
                    //读取用户输入
                    string input = Console.ReadLine();
                    if (input == "Exit()") break;
                    //编码得到字节数组
                    byte[] arr = Encoding.UTF8.GetBytes(input + "\n");
                    //写入
                    fs.Write(arr, 0, arr.Length);
                }
                fs.Flush();//让底层缓冲区的数据全部写入硬盘
            }
        }
    }
}
